package model.produto;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import model.banco.ConexaoFactory;

public class ProdutoDAO {
	
	private Connection connection;
	
	public ProdutoDAO() {
		connection = ConexaoFactory.getInstance().getConnection();
	}

	public void salvar(Produto produto) {
		String sql = "INSERT INTO PRODUTO (CODIGO, GRUPO, DESCRICAO, VALOR_COMPRA, VALOR_REVENDA, OBSERVACAO) VALUES (?, ?, ?, ?, ?, ?)";
		try {
			PreparedStatement statement = connection.prepareStatement(sql);
			statement.setString(1, produto.getCodigo());
			statement.setString(2, produto.getGrupo());
			statement.setString(3, produto.getDescricao());
			statement.setDouble(4, produto.getValorCompra());
			statement.setDouble(5, produto.getValorRevenda());
			statement.setString(6, produto.getObservacao());
			statement.execute();
			statement.close();
			connection.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public List<Produto> pesquisar(String codigo, String descricao){
		String sql = "select * from produto where codigo like '%" + codigo + "%' and descricao like '%" + descricao + "%'";
		try {
			PreparedStatement statement = connection.prepareStatement(sql);
			
			ResultSet rs = statement.executeQuery();
			
			List<Produto> produtos = new ArrayList<Produto>();
			
			while(rs.next()){
				Produto produto = new Produto();
				produto.setId(rs.getLong("id"));
				produto.setCodigo(rs.getString("codigo").trim());
				produto.setDescricao(rs.getString("descricao").trim());
				produto.setGrupo(rs.getString("grupo").trim());
				produto.setValorCompra(rs.getDouble("valor_compra"));
				produto.setValorRevenda(rs.getDouble("valor_revenda"));
				produto.setObservacao(rs.getString("observacao").trim());
				
				produtos.add(produto);
			}
			
			rs.close();
			statement.close();
			return produtos;
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	public void alterar(Produto produto) {
		String sql = "update produto set codigo=?, descricao=?, grupo=?, valor_compra=?, valor_revenda=?, observacao=? where id=?";
		PreparedStatement statement=null;
		try {
			 statement = connection.prepareStatement(sql);
			 statement.setString(1, produto.getCodigo());
			 statement.setString(2, produto.getDescricao());
			 statement.setString(3, produto.getGrupo());
			 statement.setDouble(4, produto.getValorCompra());
			 statement.setDouble(5, produto.getValorRevenda());
			 statement.setString(6, produto.getObservacao());
			 statement.setLong(7, produto.getId());
			 statement.execute();
			 statement.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
	public boolean excluir (Produto produto){
		String sql = "delete from produto where id=?";
		PreparedStatement statement = null;
		try {
			statement = connection.prepareStatement(sql);
			statement.setLong(1, produto.getId());
			statement.execute();
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return false;
	}

}
